<?php


namespace app\Services;

/**
 *
 *
 * User: Implement hdjahs@qq.com
 * Date: 2020/12/7 23:47
 */
class object
{
    public function tryObjectEncoding($o)
    {
//long value;
//
//sds s = o->ptr;
//size_t len;
//
//    /* Make sure this is a string object, the only type we encode
//     * in this function. Other types use encoded memory efficient
//     * representations but are handled by the commands implementing
//     * the type. */
//redisAssertWithInfo(NULL,o,o->type == REDIS_STRING);
//
//    /* We try some specialized encoding only for objects that are
//     * RAW or EMBSTR encoded, in other words objects that are still
//     * in represented by an actually array of chars. */
//    // 只在字符串的编码为 RAW 或者 EMBSTR 时尝试进行编码
//if (!sdsEncodedObject(o)) return o;
//
//    /* It's not safe to encode shared objects: shared objects can be shared
//     * everywhere in the "object space" of Redis and may end in places where
//     * they are not handled. We handle them only as values in the keyspace. */
//    // 不对共享对象进行编码
//if (o->refcount > 1) return o;
//
//    /* Check if we can represent this string as a long integer.
//     * Note that we are sure that a string larger than 21 chars is not
//     * representable as a 32 nor 64 bit integer. */
//    // 对字符串进行检查
//    // 只对长度小于或等于 21 字节，并且可以被解释为整数的字符串进行编码
//len = sdslen(s);
//if (len <= 21 && string2l(s,len,&value)) {
//    /* This object is encodable as a long. Try to use a shared object.
//     * Note that we avoid using shared integers when maxmemory is used
//     * because every object needs to have a private LRU field for the LRU
//     * algorithm to work well. */
//if (server.maxmemory == 0 &&
//value >= 0 &&
//value < REDIS_SHARED_INTEGERS)
//{
//decrRefCount(o);
//incrRefCount(shared.integers[value]);
//return shared.integers[value];
//} else {
//    if (o->encoding == REDIS_ENCODING_RAW) sdsfree(o->ptr);
//            o->encoding = REDIS_ENCODING_INT;
//            o->ptr = (void*) value;
//            return o;
//        }
//}
//
///* If the string is small and is still RAW encoded,
// * try the EMBSTR encoding which is more efficient.
// * In this representation the object and the SDS string are allocated
// * in the same chunk of memory to save space and cache misses. */
//// 尝试将 RAW 编码的字符串编码为 EMBSTR 编码
//if (len <= REDIS_ENCODING_EMBSTR_SIZE_LIMIT) {
//    robj *emb;
//
//    if (o->encoding == REDIS_ENCODING_EMBSTR) return o;
//        emb = createEmbeddedStringObject(s,sdslen(s));
//        decrRefCount(o);
//        return emb;
//    }
//
///* We can't encode the object...
// *
// * Do the last try, and at least optimize the SDS string inside
// * the string object to require little space, in case there
// * is more than 10% of free space at the end of the SDS string.
// *
// * We do that only for relatively large strings as this branch
// * is only entered if the length of the string is greater than
// * REDIS_ENCODING_EMBSTR_SIZE_LIMIT. */
//// 这个对象没办法进行编码，尝试从 SDS 中移除所有空余空间
//if (o->encoding == REDIS_ENCODING_RAW &&
//sdsavail(s) > len/10)
//    {
//        o->ptr = sdsRemoveFreeSpace(o->ptr);
//    }
//
//    /* Return the original object. */
//    return o;
    }
}